package com.qf.zxq.code.common.utils;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.commons.lang3.ObjectUtils;

import java.lang.reflect.Field;

public class ConversionTool {


    public static <T> QueryWrapper<T> addConditions(QueryWrapper<T> qw, Object obj) {
        for (Field declaredField : obj.getClass().getDeclaredFields()) {
            // 设置访问权限
            declaredField.setAccessible(true);
            //遍历里面的内容判断是否为空
            try {
                Object o = declaredField.get(obj);
                if (!ObjectUtils.isEmpty(o)) {
                    // 不为空，这代表有判断条件
                    // 如果条件类型为字符串
                    if (declaredField.getType() == String.class) {
                        // 判断
                        if (!o.equals("")) {
                            qw.like(ConversionTool.toUnderScoreCase(declaredField.getName()), "%" + o + "%");
                        }
                    }
                    //如果条件类型为数字
                    else if (declaredField.getType() == Integer.class) {
                        if (o instanceof Integer && (Integer) o != 0) {
                            qw.eq(declaredField.getName(), o);
                        }
                    }

                }
            } catch (IllegalAccessException e) {
                throw new RuntimeException(e);
            }
        }
        return qw;
    }


    /**
     * 将驼峰命名方式的字符串转换成下划线命名方式
     *
     * @param name 驼峰命名方式的字符串
     * @return 下划线命名方式的字符串
     */
    public static String toUnderScoreCase(String name) {
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < name.length(); i++) {
            char ch = name.charAt(i);
            if (Character.isUpperCase(ch)) {
                result.append("_").append(Character.toLowerCase(ch));
            } else {
                result.append(ch);
            }
        }
        return result.toString();
    }
}
